#include <stdio.h>

int main(int argc, char **argv)
{
    // restrict说明符允许编译器优化某些代码。它只能用于指针，表明该指针是访问数据的唯一方式。

    int *restrict pt = (int *)malloc(10 * sizeof(int));
    // 上面示例中，restrict表示变量pt是访问 malloc 所分配内存的唯一方式。

    // 下面例子的变量foo，就不能使用restrict修饰符。

    int foo[10];
    int *bar = foo;
    // 上面示例中，变量foo指向的内存，可以用foo访问，也可以用bar访问，因此就不能将foo设为 restrict。
    // 如果编译器知道某块内存只能用一个方式访问，可能可以更好地优化代码，因为不用担心其他地方会修改值。

    // restrict用于函数参数时，表示参数的内存地址之间没有重叠。

    // void swap(int* restrict a, int* restrict b) {
    //   int t;
    //   t = *a;
    //   *a = *b;
    //   *b = t;
    // }

    return 0;
}